package com.navi.mould1.reportUtils;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.text.NumberFormat;

/**
 *  对数值进行计算的类
 *
 *  求平均、求百分比...等
 */
public final class ComputeUtil {

    /*** 求Double类型比例 **/
    public static double getRate(long numerator, long denominator) {
        if (denominator == 0) return 0.0;
        return new BigDecimal(numerator).divide(new BigDecimal(denominator), 4, BigDecimal.ROUND_HALF_UP).doubleValue();
    }

    /*** 求Double类型比例 **/
    public static double getRate(long numerator, long denominator, int scale) {
        if (denominator == 0) return 0.0;
        return new BigDecimal(numerator).divide(new BigDecimal(denominator), scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    }

    /*** 求平均 **/
    public static double getAverageRate(double rate, int cnt) {
        if (cnt == 0) return 0.0;
        return new BigDecimal(rate).divide(new BigDecimal(cnt), 4, BigDecimal.ROUND_HALF_UP).doubleValue();
    }

    /*** 求平均 **/
    public static double getAverageRate(double rate, int cnt, int scale) {
        if (cnt == 0) return 0.0;
        return new BigDecimal(rate).divide(new BigDecimal(cnt), scale, BigDecimal.ROUND_HALF_UP).doubleValue();
    }

    /*** 求百分比 **/
    public static String getPercent(Double rate) {
        NumberFormat nf = NumberFormat.getPercentInstance();
        nf.setMinimumFractionDigits(2);           //设置保留小数位
        nf.setRoundingMode(RoundingMode.HALF_UP); //设置舍入模式
        return nf.format(rate);
    }

    /*** 四舍五入保留两位小数 **/
    public static Double formatDouble2(double double_data) {
        //return new BigDecimal(double_data).divide(new BigDecimal(6), 2, BigDecimal.ROUND_HALF_UP).doubleValue();
        //return new BigDecimal(double_data).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        return Double.parseDouble(new DecimalFormat("#.00").format(double_data));
    }

    /*** 四舍五入保留两位小数 **/
    public static Double formatDouble2(String string_data) {
        //return new BigDecimal(string_data).divide(new BigDecimal(6), 2, BigDecimal.ROUND_HALF_UP).doubleValue();
        //return new BigDecimal(string_data).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
        return Double.parseDouble(new DecimalFormat("#.00").format(Double.parseDouble(string_data)));
    }

    /*** 四舍五入保留几位小数 **/
    public static Double formatDouble2(double double_data, int scale) {
        String pattern = "#.";
        for (int i=1; i<=scale; i++) {
            pattern += "0";
        }
        return Double.parseDouble(new DecimalFormat(pattern).format(double_data));
    }

    /*** 四舍五入保留几位小数 **/
    public static Double formatDouble2(String string_data, int scale) {
        String pattern = "#.";
        for (int i=1; i<=scale; i++) {
            pattern += "0";
        }
        return Double.parseDouble(new DecimalFormat(pattern).format(Double.parseDouble(string_data)));
    }


}
